home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / windemo.mod < prev    next >
Text File  |  1995-11-25  |  17KB  |  431 lines

  1. MODULE  WinDemo;
  2.  
  3. FROM SYSTEM       IMPORT ADR,ADDRESS,VAL,SHORT;
  4. FROM Applications IMPORT Init,Terminate,deskx,desky,deskw,deskh,
  5.                          InitResource,ShowMenuBar,ShowNormal,DeskTree,
  6.                          MenuTree,Colour,Appl;
  7. FROM KbdEvnt      IMPORT MenuSearch;
  8. FROM AES          IMPORT ResourceGetAddr,ObjectChange,ObjectFind,FormAlert,
  9.                          GrafMouse,EventMultiple,FormDialogue,GrafDragBox,
  10.                          WindowFind,GrafRubberBox,MenuBar,WindowGet,
  11.                          MenuTitleNormal;
  12.  
  13. FROM WindowMenue IMPORT InstallMenu,MenuX,MenuY,MenuW,MenuH;
  14. FROM WinIcon IMPORT CreateIconWindow,OpenIconWindow,InstallIcon;
  15. FROM EasyDialog    IMPORT and, DoMoveDialog,GetObjectState,IsSelected;
  16. FROM EasyWindows IMPORT TerminateWindows,windowtype,windowlist,
  17.      wstring,createWindow,openWindow,AllElements,
  18.      RedrawProcType,rectangle,DoRedraw,topWindow,clearWindow,setWindow,
  19.      closeWindow,fullWindow,WriteStr,Effects;
  20.  
  21. FROM WindowDialogue IMPORT OpenWindowDial,CloseWindowDial,DoWindowDial;
  22.  
  23.  
  24.  
  25.  
  26. FROM GEMAESbase    IMPORT Arrow,PointHand,FlatHand, MesageEvent,TimerEvent,KeyboardEvent,
  27.                        ButtonEvent,MenuSelected,Top,Mouse1Event,Mouse2Event,
  28.                        WindowRedraw, WindowTopped, WindowClosed, WindowFulled,
  29.                        WindowArrowed, WindowHorizSlided, WindowVertSlided,
  30.                        WindowSized, WindowMoved, WindowNewTop, WindowKind,
  31.                        Selected,Black,White;
  32.  
  33.  
  34. VAR     RSCfileName : ARRAY[1..12] OF CHAR;
  35.         ENDE : BOOLEAN;
  36.      MenuAdr,txtAdr,grafAdr : ADDRESS;
  37.     InfoAdr : ADDRESS;
  38.     Info1Adr : ADDRESS;
  39.     Info2Adr : ADDRESS;
  40.     win1,win2,win3 :INTEGER;
  41.  
  42.         OK   : BOOLEAN;
  43.         Mo1h : INTEGER;
  44.     WinMenuAktiv : BOOLEAN;
  45. CONST
  46.       TREE1 = 0;      (* TREE *)
  47.       TREE2 = 1;      (* TREE *)
  48.       MENABOUT = 2;      (* TREE *)
  49.       TREE4 = 3;      (* TREE *)
  50.       TREE5 = 4;      (* TREE *)
  51.       WINABOUT = 5;      (* TREE *)
  52.       TREE7 = 6;      (* TREE *)
  53.       ABOUTMEN = 7;      (* OBJECT in TREE #0 *)
  54.       WINDOW = 18;      (* OBJECT in TREE #0 *)
  55.       MENUWIN = 19;      (* OBJECT in TREE #0 *)
  56.       TEXTWIN = 21;      (* OBJECT in TREE #0 *)
  57.       GRAFWIN = 20;      (* OBJECT in TREE #0 *)
  58.       QUIT = 16;      (* OBJECT in TREE #0 *)
  59.       ABOUTWIN = 9;      (* OBJECT in TREE #1 *)
  60.       CLOSE = 18;      (* OBJECT in TREE #1 *)
  61.       LINKSBUE = 4;      (* OBJECT in TREE #3 *)
  62.       CENTRIER = 8;      (* OBJECT in TREE #3 *)
  63.       RECHTSBU = 6;      (* OBJECT in TREE #3 *)
  64.       BLOCKSAZ = 2;      (* OBJECT in TREE #3 *)
  65.       NORMAL = 14;      (* OBJECT in TREE #3 *)
  66.       KURSIV = 18;      (* OBJECT in TREE #3 *)
  67.       FETT = 12;      (* OBJECT in TREE #3 *)
  68.       UNDERLIN = 16;      (* OBJECT in TREE #3 *)
  69.       OUTLINED = 10;      (* OBJECT in TREE #3 *)
  70.       MAUER = 1;      (* OBJECT in TREE #4 *)
  71.       ATARI = 2;      (* OBJECT in TREE #4 *)
  72.       KUGELN = 3;      (* OBJECT in TREE #4 *)
  73.       FISCHGRE = 4;      (* OBJECT in TREE #4 *)
  74.       KACHEL = 5;      (* OBJECT in TREE #4 *)
  75.       BAEUME = 6;      (* OBJECT in TREE #4 *)
  76.       CHECKBOX = 19;      (* OBJECT in TREE #1 *)
  77. ə
  78.  
  79. PROCEDURE WindowEvent(Message:ARRAY OF INTEGER;ID:INTEGER ):BOOLEAN;
  80. VAR Window : INTEGER;
  81.     x,y,w,h :INTEGER;
  82.     x0,y0,w0,h0 :INTEGER;
  83. BEGIN
  84.   (* Für welches Fenster ist die Meldung?*)
  85.   Window :=Message[3];
  86.   IF Window#0 THEN
  87.     CASE Message[0] OF
  88.           WindowRedraw       :    (* Window needs redrawing *)
  89.                                    DoRedraw(Message[3],Message[4],Message[5],
  90.                                                        Message[6],Message[7],TRUE);
  91.          | WindowTopped      ,    (* A window was moved to the top *)
  92.            WindowNewTop      :    (* Window was moved to top (activated) *)
  93.                                    topWindow(Window);
  94.                                    (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  95.                                    ShowMenuBar(TRUE);
  96.                                    WinMenuAktiv:=FALSE;
  97.  
  98.          | WindowClosed      :    (* Window was closed *)
  99.                                    closeWindow(Window);
  100.                                    (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  101.                                    ShowMenuBar(TRUE);
  102.                                    WinMenuAktiv:=FALSE;
  103.  
  104.          | WindowFulled      :    (* Wndow was fulled *)
  105.                                    fullWindow(Window);
  106.          | WindowArrowed     :    (* Window was arrowed *)
  107.          | WindowHorizSlided :    (* Horizontal slider was moved *)
  108.          | WindowVertSlided  :    (* Vertical slider was moved *)
  109.          | WindowSized       ,    (* Window was sized *)
  110.            WindowMoved       :    (* Window was moved *)
  111.                                    setWindow(Window,Message[4],Message[5],
  112.                                              Message[6],Message[7]);
  113.                                    (* Redraw erzwingen ! => WindowMenüzeilen werden wieder eingeschaltet *)
  114.                                     FormDialogue(0,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
  115.                                     FormDialogue(3,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
  116.     ELSE
  117.          RETURN FALSE
  118.     END(*CASE*);
  119.     RETURN TRUE
  120.   ELSE
  121.     RETURN FALSE
  122.   END(*IF*);
  123. END WindowEvent;
  124.  
  125. PROCEDURE redwin(win:INTEGER; r:rectangle);
  126. BEGIN
  127.    clearWindow(win);
  128. END redwin;
  129.  
  130. PROCEDURE redMenwin(win:INTEGER; r:rectangle);
  131. VAR Window :windowtype;
  132.     OK :BOOLEAN;
  133. BEGIN
  134.    clearWindow(win);
  135.    IF windowlist[win]^.ontop THEN
  136.       OK:=InstallMenu(win,windowlist[win]^.reference);
  137.       Mo1h:=desky;(* Aktive Menüzeile liegt im Fenster => Überwachung für Menüzeile wieder einschalten *)
  138.       WinMenuAktiv:=TRUE;
  139.  
  140.    END(*IF*);
  141. END redMenwin;
  142.  
  143. PROCEDURE  redIconWin(win :INTEGER; r:rectangle);
  144. VAR I : INTEGER;
  145. BEGIN
  146.    clearWindow(win);
  147.    FOR I:= 3 TO 10 DO
  148.        WriteStr(win,I,I,"Test Text");
  149.    END(*FOR*);
  150.    InstallIcon(win,r);
  151. END redIconWin;
  152.  
  153. PROCEDURE DoGrafIconDia(window,mousex,mousey :INTEGER);
  154. VAR Index : INTEGER;
  155.     State : INTEGER;
  156.     win : windowtype;
  157.     i : INTEGER;
  158. BEGIN
  159.    win := windowlist[window]^;
  160.    Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
  161.    State:= GetObjectState(windowlist[window]^.reference,Index);
  162.    IF and(State,Selected) AND (Index>0) THEN
  163.       ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
  164.                    win.work.y,win.work.w,win.work.h,State-Selected,1);
  165.       windowlist[window]^.InteriorStyle:=1C;
  166.       windowlist[window]^.FillStyle:=1C;
  167.       windowlist[window]^.colour:=White;
  168.    ELSIF  ~and(State,Selected) AND (Index>0) THEN
  169.  
  170.  
  171.       windowlist[window]^.InteriorStyle:=2C;
  172.       windowlist[window]^.colour:=Black;
  173.       FOR i := MAUER TO BAEUME DO
  174.           IF IsSelected(i,win.reference) THEN
  175.              ObjectChange(windowlist[window]^.reference,i,0,win.work.x,
  176.                           win.work.y,win.work.w,win.work.h,
  177.                           GetObjectState(win.reference,i)-Selected,1);
  178.           END(*IF*);
  179.       END(*FOR*);
  180.       ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
  181.                    win.work.y,win.work.w,win.work.h,State+Selected,1);
  182.  
  183.       IF MAUER = Index THEN
  184.          windowlist[window]^.FillStyle:=CHR(9)
  185.  
  186.       ELSIF ATARI = Index THEN
  187.           windowlist[window]^.FillStyle:=CHR(10);
  188.  
  189.       ELSIF KUGELN = Index THEN
  190.           windowlist[window]^.FillStyle:=CHR(19);
  191.  
  192.       ELSIF FISCHGRE = Index THEN
  193.            windowlist[window]^.FillStyle:=CHR(16)
  194.  
  195.       ELSIF KACHEL = Index THEN
  196.            windowlist[window]^.FillStyle:=CHR(22)
  197.  
  198.       ELSIF BAEUME = Index THEN
  199.            windowlist[window]^.FillStyle:=CHR(12)
  200.  
  201.       END(*IF*);
  202.    END(*IF*);
  203.    IF Index>0 THEN
  204.      FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
  205.      FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
  206.    END(*IF*);
  207. END  DoGrafIconDia;
  208.  
  209. PROCEDURE DoTextIconDia(window,mousex,mousey :INTEGER);
  210. VAR Index : INTEGER;
  211.     State : INTEGER;
  212.     win : windowtype;
  213. BEGIN
  214.    win := windowlist[window]^;
  215.    Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
  216.    State:= GetObjectState(windowlist[window]^.reference,Index);
  217.    IF and(State,Selected) AND (Index>1) THEN
  218.       ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
  219.                    win.work.y,win.work.w,win.work.h,State-Selected,1);
  220.       IF Index = NORMAL THEN
  221.          EXCL(windowlist[window]^.texteffects,Shaded);
  222.       ELSIF Index = KURSIV THEN
  223.          EXCL(windowlist[window]^.texteffects,Italic);
  224.       ELSIF Index = FETT THEN
  225.          EXCL(windowlist[window]^.texteffects,Bold);
  226.       ELSIF Index =  UNDERLIN THEN
  227.          EXCL(windowlist[window]^.texteffects,Underlined);
  228.       ELSIF Index = OUTLINED THEN
  229.          EXCL(windowlist[window]^.texteffects,Outlined);
  230.       END(*IF*);
  231.    ELSIF  ~and(State,Selected) AND (Index>1) THEN
  232.       ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
  233.                    win.work.y,win.work.w,win.work.h,State+Selected,1);
  234.       IF Index = NORMAL THEN
  235.          INCL(windowlist[window]^.texteffects,Shaded);
  236.       ELSIF Index = KURSIV THEN
  237.          INCL(windowlist[window]^.texteffects,Italic);
  238.       ELSIF Index = FETT THEN
  239.          INCL(windowlist[window]^.texteffects,Bold);
  240.       ELSIF Index =  UNDERLIN THEN
  241.          INCL(windowlist[window]^.texteffects,Underlined);
  242.       ELSIF Index = OUTLINED THEN
  243.          INCL(windowlist[window]^.texteffects,Outlined);
  244.       END(*IF*);
  245.    END(*IF*);
  246.    IF Index>0 THEN
  247.      FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
  248.      FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
  249.    END(*IF*);
  250. END  DoTextIconDia;
  251.  
  252. PROCEDURE Auswahl;
  253. VAR formret : INTEGER;
  254.     String   : ARRAY [0..127] OF  CHAR;
  255.     message :INTEGER;
  256.     events,flag,mx,my,mbutton,mstate,scancode,mclicks,u:INTEGER;
  257.     MX,MY,MW,MH : INTEGER;
  258.     Mo1x,Mo1w,Mo1y : INTEGER;
  259.     RetChar : CHAR;
  260.     s:wstring;
  261.     rd :RedrawProcType;
  262.     MsgBuf :ARRAY[0..7] OF INTEGER;
  263.     ok : BOOLEAN;
  264.     w: INTEGER;
  265. BEGIN
  266. flag :=MesageEvent+TimerEvent+KeyboardEvent+ButtonEvent+Mouse1Event+Mouse2Event;
  267. ResourceGetAddr(0,MENABOUT,InfoAdr);
  268. ResourceGetAddr(0,WINABOUT,Info1Adr);
  269. ResourceGetAddr(0,TREE7,Info2Adr);
  270. ResourceGetAddr(0,TREE2,MenuAdr);
  271. ResourceGetAddr(0,TREE5,grafAdr);
  272. ResourceGetAddr(0,TREE4,txtAdr);
  273. Mo1x:=0;Mo1y:=0;Mo1h:=desky;Mo1w:=deskw;
  274. MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  275. WinMenuAktiv:=FALSE;
  276.  
  277. REPEAT
  278.  ENDE := FALSE;
  279.  events:=EventMultiple(flag,2,03,01,
  280.                        0,Mo1x,Mo1y,Mo1w,Mo1h,(* wartet darauf das Maus sich in die Menüzeile bewegt *)
  281.                        0,MX,MY,MW,MH,(* wartet darauf das Maus WindowMenü betritt *)
  282.                        ADR(MsgBuf),
  283.                        10000,0,(* Timer Event*)
  284.                        mx,my,
  285.                        mbutton,mstate,scancode,mclicks);
  286.  IF and(events,MesageEvent)THEN
  287.    IF MsgBuf[0]=MenuSelected THEN
  288.     message:= MsgBuf[4];
  289.     IF ~WinMenuAktiv THEN
  290.      CASE message OF
  291.         ABOUTMEN      : IF win1<1 THEN
  292.                           s:=" Menu-Info ";
  293.                           win1:=OpenWindowDial(InfoAdr,s);
  294.                         ELSE
  295.                            topWindow(win1);
  296.                         END(*IF*);
  297.                         (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  298.                         ShowMenuBar(TRUE);
  299.                         WinMenuAktiv:=FALSE;
  300.                         MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  301.                         formret:=DoWindowDial(Appl,win1,InfoAdr,0);
  302.                         IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
  303.  
  304.         |QUIT     : ENDE := TRUE
  305.         |WINDOW  : s:="Window-Demo";
  306.                     rd:=redwin;
  307.                     createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
  308.                     openWindow(u,00,00,00,00);
  309.                     (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  310.                     ShowMenuBar(TRUE);
  311.                     WinMenuAktiv:=FALSE;
  312.                     MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  313.         |MENUWIN : s:=" Window with Menubar ";
  314.                     rd:=redMenwin;
  315.                     createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
  316.                     openWindow(u,300,200,300,100);
  317.                     ok:=InstallMenu(u,MenuAdr);
  318.                     WinMenuAktiv:=TRUE;
  319.                     Mo1h:=desky;
  320.        |TEXTWIN :  s:= " Window mit IconLeiste ";
  321.                    rd:=redIconWin;
  322.                    u:=CreateIconWindow(txtAdr,s,00,00,00,00,rd,AllElements);
  323.                    OpenIconWindow(u,100,100,110,110);
  324.                    ShowMenuBar(TRUE);
  325.                    WinMenuAktiv:=FALSE;
  326.                    MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  327.  
  328.        |GRAFWIN :  s:= " Window mit IconLeiste ";
  329.                    rd:=redIconWin;
  330.                    u:=CreateIconWindow(grafAdr,s,00,00,00,00,rd,AllElements);
  331.                    OpenIconWindow(u,100,100,100,100);
  332.                    ShowMenuBar(TRUE);
  333.                    WinMenuAktiv:=FALSE;
  334.                    MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  335.      ELSE
  336.      END(*CASE*);
  337.      ShowNormal(MsgBuf[3]);
  338.     ELSE
  339.      CASE message OF
  340.         ABOUTWIN      : IF win2<1 THEN
  341.                            s:=" Window-Info ";
  342.                            win2:=OpenWindowDial(Info1Adr,s);
  343.                         ELSE
  344.                                    topWindow(win2);
  345.                         END(*IF*);
  346.                         (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  347.                         ShowMenuBar(TRUE);
  348.                         WinMenuAktiv:=FALSE;
  349.                         MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  350.                         formret:=DoWindowDial(Appl,win2,Info1Adr,0);
  351.                         IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
  352.         |CHECKBOX  : IF win3<1 THEN
  353.                            s:=" Window-Checkbox ";
  354.                            win3:=OpenWindowDial(Info2Adr,s);
  355.                         ELSE
  356.                            topWindow(win3);
  357.                         END(*IF*);
  358.                         (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
  359.                         ShowMenuBar(TRUE);
  360.                         WinMenuAktiv:=FALSE;
  361.                         MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  362.                         formret:=DoWindowDial(Appl,win3,Info2Adr,0);
  363.                         IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
  364.         |CLOSE     : ENDE := TRUE
  365.      ELSE
  366.      END(*CASE*);
  367.        MenuTitleNormal(MenuAdr,MsgBuf[3],1)
  368.     END(*IF*);
  369.    ELSE
  370.       ok:=WindowEvent(MsgBuf,Appl);
  371.    END(*IF*);
  372.  ELSIF  and(events,KeyboardEvent) THEN
  373.       IF ~MenuSearch(Appl,MenuTree,mstate,scancode,RetChar) THEN
  374.          IF RetChar=33C THEN (* ESC-Taste gedrückt!*)
  375.            ShowMenuBar(FALSE);
  376.            (* Hier wird ein Kommplett Redraw erzwungen ! *)
  377.            FormDialogue(0,0,0,0,0,deskx,desky,deskw,deskh);
  378.            FormDialogue(3,0,0,0,0,deskx,desky,deskw,deskh);
  379.            (* Menü wieder einschalten *)
  380.            ShowMenuBar(TRUE);
  381.          END(*IF*);
  382.       END(*IF*);
  383.  ELSIF and(events,Mouse1Event) THEN
  384.            (* Menü wieder einschalten *)
  385.            ShowMenuBar(TRUE);
  386.            Mo1h:=0; (* Menüzeile ist aktiv -> Braucht nicht nochmals aktiviert zu werden *)
  387.            MX:=MenuX;MY:=MenuY;MH:=MenuH;MW:=MenuW;(* Überwachung der WindowMenüZeile einschalten*)
  388.            WinMenuAktiv:=FALSE;
  389.  
  390.  ELSIF and(events,Mouse2Event) THEN
  391.            (* WindowMenü wieder einschalten *)
  392.            ok:=InstallMenu( WindowFind(mx,my),MenuAdr);
  393.            IF ok THEN
  394.              Mo1h:=desky; (* WindowMenüzeile ist aktiv *)
  395.              MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
  396.              WinMenuAktiv:=TRUE;
  397.            END(*IF*);
  398.  ELSIF and(events,ButtonEvent) THEN
  399.      w:=WindowFind(mx,my);
  400.      IF w=win1 THEN
  401.         formret:=DoWindowDial(Appl,win1,InfoAdr,0);
  402.         IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
  403.      ELSIF  w=win2 THEN
  404.         formret:=DoWindowDial(Appl,win2,Info1Adr,0);
  405.         IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
  406.      ELSIF  w=win3 THEN
  407.         formret:=DoWindowDial(Appl,win3,Info2Adr,0);
  408.         IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
  409.      ELSE
  410.         IF windowlist[w]#NIL THEN
  411.            IF windowlist[w]^.reference=txtAdr THEN
  412.               DoTextIconDia(w,mx,my);
  413.            ELSIF  windowlist[w]^.reference=grafAdr THEN
  414.               DoGrafIconDia(w,mx,my);
  415.            END(*IF*);
  416.         END(*IF*);
  417.      END(*IF*);
  418.  END(*IF*);
  419. UNTIL ENDE
  420. END Auswahl;
  421.  
  422. BEGIN
  423.     RSCfileName :='WINDOWME.RSC';
  424.     Init;
  425.     win1:=-1;win2:=-1;win3:=-1;
  426.     OK:=InitResource(-1,TREE1,RSCfileName);
  427.     IF OK THEN Auswahl END(*IF*);
  428.     TerminateWindows;
  429.     Terminate;
  430. END WinDemo.
  431.